package com.otod.kb.main.web;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.otod.base.json.JsonFailure;
import com.otod.base.json.JsonSuccess;
import com.otod.commons.constants.CommonConstant;
import com.otod.commons.entity.Page;
import com.otod.commons.utils.StringUtils;
import com.otod.commons.web.BaseController;
import com.otod.kb.main.service.KbService;
import com.otod.kb.main.vo.KbContentVo;
import com.otod.kb.main.vo.KbMasterVo;

/**
 * 知识库管理
 * 
 * @author 
 */
@Controller
@RequestMapping("kb/main")
public class KbController extends BaseController {
	@Autowired
	private KbService kbService;
	
	/**
	 * 分页查询知识库信息列表
	 * @param request
	 * @return
	 */
	@RequestMapping(value="queryMaster",method=RequestMethod.GET)
	@ResponseBody
	public Page queryPage(HttpServletRequest request,String kbName){
		Map params = super.getParamMapFromRequest(request);
		//模糊查询用到
		params.put("kbName", kbName);
		Page page = new Page(request);
		return kbService.queryForList(page,params);
		
	}
	
	/**
	 * 删除项目
	 * @param vo
	 * @return
	 */
	@RequestMapping(value="delMaster",method=RequestMethod.GET)
	@ResponseBody
	public String delMaster(String uuid){
		if(StringUtils.isEmpty(uuid)){
			return JsonFailure.factory("请选择要删除的项目");
		}
		//删除知识库
		kbService.delMaster(uuid);
		//修改知识库内容状态
		kbService.updateContentStatus(uuid, CommonConstant.COMMON_NO);
		return JsonSuccess.factory("删除项目成功");
	}
	
	/**
	 * 根据项目ID获取角色信息
	 * @param idgetContentById
	 * @return
	 */
	@RequestMapping(value="getMasterById",method=RequestMethod.POST)
	@ResponseBody
	public KbMasterVo getMasterById(String uuid) {
		return kbService.getById(uuid);
   }
	
	
	/**
	 * 保存知识库信息
	 * @param vo
	 * @return
	 */
	@RequestMapping(value="saveMaster",method=RequestMethod.POST)
	@ResponseBody
	public String saveMaster(KbMasterVo masterVo,KbContentVo contentVo,String kbType,String kbSrc,String uuidOne,MultipartFile fileUpload,HttpServletRequest request) throws Exception {	
		//如果前台输入数据有误 就会有异常
		if(null != masterVo){
			if(null != masterVo.getUuid() && !"".equals(masterVo.getUuid())){
				
				String str = upLoad(fileUpload, request);
				if(str=="上传的文件太大，文件大小不能超过10M"||"上传的文件太大，文件大小不能超过10M".equals(str)){
					return JsonSuccess.factory("上传的文件太大，文件大小不能超过10M");
				}else if(str=="上传的文件格式不支持"||"上传的文件格式不支持".equals(str)){
					return JsonSuccess.factory("上传的文件格式不支持");
				}
				
				//更新
				Map<String,Object> map = new HashMap<String,Object>();
				map.put("uuid", masterVo.getUuid());
				map.put("kbName", masterVo.getKbName());
				//类型
				map.put("kbType",kbType);
				//来源
				map.put("kbSrc",kbSrc);
				map.put("authorDate", masterVo.getAuthorDate());
				map.put("depict", masterVo.getDepict());
				kbService.updateMaster(map);
				//更新知识库 或者添加知识库
				if(StringUtils.isEmpty(uuidOne)){
					//设置项目的id  新增
					contentVo.setKbId(masterVo.getUuid());
					kbService.addContent(contentVo);
				}else{
					//修改
					Map<String, Object> contentMap = new HashMap<String,Object>();
					contentMap.put("uuid", uuidOne);
					contentMap.put("kbId", masterVo.getUuid());
					contentMap.put("content", contentVo.getContent());
					contentMap.put("atPath", contentVo.getAtPath());
					contentMap.put("pageNum", contentVo.getPageNum());
					kbService.updateContent(contentMap);
				}
			
				
				
			}else{
				//把附件上传到服务器
				String str = upLoad(fileUpload, request);
				if(str=="上传的文件太大，文件大小不能超过10M"||"上传的文件太大，文件大小不能超过10M".equals(str)){
					return JsonSuccess.factory("上传的文件太大，文件大小不能超过10M");
				}else if(str=="上传的文件格式不支持"||"上传的文件格式不支持".equals(str)){
					return JsonSuccess.factory("上传的文件格式不支持");
				}
				
				//新增 kbmaster
				// 改 由于项目使用下拉列表不能封装值  要单独得到值
				masterVo.setKbType(kbType);
				masterVo.setKbSrc(kbSrc);
				masterVo.setStatus(CommonConstant.COMMON_YES);
				kbService.addMaster(masterVo);
				//得到master表中的uuid 通过类型 和名字查询
				KbMasterVo kbMasterVo = kbService.selectMaster(kbType, masterVo.getKbName());
				//设置项目的id
				contentVo.setKbId(kbMasterVo.getUuid());
				//设置状态
				contentVo.setStatus(CommonConstant.COMMON_YES);
				//新增content表
				kbService.addContent(contentVo);			
				
			}
		}
		
		return JsonSuccess.factory("保存知识库成功");
	}
	
	/********************************************************************************/
	
	
	/**
	 * 根据项目ID获取角色信息
	 * @param id
	 * @return
	 */
	@RequestMapping(value="getContentById",method=RequestMethod.POST)
	@ResponseBody
	public KbContentVo getContentById(String uuid) {
		return kbService.getContentById(uuid);
   }
	
	
	/**********************************文件上传方法  可能用不到***************************************************/
	public String upLoad(MultipartFile fileUpload,HttpServletRequest request){
		//springMvc 上传文件在spring中的配置
		/*<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	        <property name="maxUploadSize" value="100000000"/>
		    </bean>*/
	 	//判断是否有文件
         if (!fileUpload.isEmpty()) {
            try { 
                String fileName = fileUpload.getOriginalFilename();
                //获取文件后缀
                String[] suffixs=fileName.split("\\.");
                String suffix = "."+suffixs[suffixs.length-1];
                     
                	//判断上传的文件格式是否正确
                    if((".docx.doc.txt.xlsx".indexOf(suffix.toLowerCase())!=-1)){
                        byte[] bytes = fileUpload.getBytes();
                        Integer fileSize = (int)fileUpload.getSize()/1024;
                         
                        /**
                         * 如果文件小于10M，则上传文件，否则提示用户不能超过10M
                         */
                        if(fileSize<=10240){
                             
                            String uploadPath = "upload/"+fileName;
                            File filePath = new File(request.getSession().getServletContext().getRealPath(uploadPath));
 
                            //文件开始上传到服务器上
                            FileCopyUtils.copy(bytes, filePath);
                             
                        }else{
                        	return "上传的文件太大，文件大小不能超过10M";
                        }
                    }else{
                    	return "上传的文件格式不支持";
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
           }
         return "";
	}
	
}
